<?php 
class DbUtils{
	/*
	 **********************************************************参数**********************************************************
	 */
	static $_instance;
	private $db;
	
	/*
	 **********************************************************系统函数******************************************************
	 */
	private function __construct(){
		$this->__connection();
	}
	
	private function __clone(){
		
	}
	
	private function __connection(){
		try {
			$configs = $this->__getINI();
		}catch (INIReadFaild $e){
			echo $e->getMessage();
		}
		$dsn = "mysql:dbname=".$configs['database.name'].";host=".$configs['database.host'];
		$username = $configs['database.username'];
		$password = $configs['database.password'];
		try {
			$db = new PDO($dsn, $username, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';"));
		}catch (PDOException $e){
			echo $e->getMessage();
		}
		$this->db = $db;
	}
	
	private function __getINI(){
		$IniPath = $_SERVER['DOCUMENT_ROOT']."/configs/configs.ini";
		if (!$configs = parse_ini_file($IniPath)){
			throw new INIReadFaild("Read configs.ini Failed!");
		}
		return $configs;
	}
	
	public static function getInstance(){
		if (!(self::$_instance instanceof self)){
			self::$_instance = new self();
		}
		return self::$_instance;
	}
	
	/*
	 **********************************************************功能函数******************************************************
	 */
	
	/*
	 * query查询函数
	 * 该方法主要用于查询，不用于插入，删除等操作
	 * 
	 * @param string $sql		查询的sql语句 
	 * @return array $results		返回查询出的结果数组，查询失败返回FALSE
	 */
	public function query($sql){
		$db = $this->db;
		$results = $db->query($sql);
		$results = $results->fetchAll();
		if ($results){
			$result = $results;
		}else{
			$result = FALSE;
		}
		return $result;
	}
	
	/*
	 * exec函数
	 * 该方法主要用于插入，返回影响的条数
	 * 
	 * @param string $sql		查询的sql语句
	 * $return int $results		返回sql运行后影响的行数，sql运行失败返回FALSE
	 * 
	 */
	public function exec($sql){
		$results = $this->db->exec($sql);
		return $results;
	}
	
	/*
	 * count函数
	 * 该方法主要查询传入表中的数据条数
	 * 
	 * @param string $table		要查询的表名称
	 * @return int	$results	该表的数据条数
	 */
	public function count($table){
		$sql = "select count(1) from $table";
		$results = $this->db->query($sql)->fetchColumn();
		return $results;
	}
	
	
	/*
	 * getLastId函数
	 * 该方法返回数据库中最后一个数据的ID号
	 * 
	 * @param String $table		要查询的表名称
	 * @param String $id		要查询的表的主键的名称，默认为id
	 * @return int $results		查询出来的该表的最后一个id的值
	 */
	public function getLastId($table,$id='id'){
		$sql = "select $id from `$table` GROUP BY $id desc limit 0,1";
		$results = $this->db->query($sql);
		foreach ($results as $result){
			$results = $result[$id];
		}
		return $results;
	}
	
}